package bd;

import java.sql.*;

/** Classe pCo, encarregada da criação do painel de comerciais
 *
 */
public class pCo extends javax.swing.JPanel {

    private String condicoes;
    private conecta bd;
    private frame principal;
    private ResultSet retorno;
    private boolean atualizacao;
    private String novaLinha;
    private painelTabelas painel;

    /** construtor da classe pCo, encarregado de dar forma ao painel,
     * fazer a ligação com o banco de dados e com a janela principal
     */
    public pCo(conecta bd, frame principal, painelTabelas painel) {
        initComponents();
        this.bd = bd;
        this.principal = principal;
        this.cancelaCo.setVisible(false);
        this.painel = painel;
    }

    /** Método initComponents(). tem a função da criação da janela de comercial,
     * criando botões, caixas de texto, etc. É o método que dá forma à janela.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buscaCo = new javax.swing.JButton();
        insereCo = new javax.swing.JButton();
        atualizaCo = new javax.swing.JButton();
        removeCo = new javax.swing.JButton();
        cancelaCo = new javax.swing.JButton();
        jLabel37 = new javax.swing.JLabel();
        jLabel38 = new javax.swing.JLabel();
        jLabel39 = new javax.swing.JLabel();
        jLabel40 = new javax.swing.JLabel();
        jLabel41 = new javax.swing.JLabel();
        idDeCOM = new javax.swing.JTextField();
        tituloPrCOM = new javax.swing.JTextField();
        idPrCOM = new javax.swing.JTextField();
        descricaoCOM = new javax.swing.JTextField();

        buscaCo.setText("Buscar");
        buscaCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscaCoActionPerformed(evt);
            }
        });

        insereCo.setText("Inserir");
        insereCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                insereCoActionPerformed(evt);
            }
        });

        atualizaCo.setText("Atualizar");
        atualizaCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizaCoActionPerformed(evt);
            }
        });

        removeCo.setText("Remover");
        removeCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeCoActionPerformed(evt);
            }
        });

        cancelaCo.setText("Cancelar");
        cancelaCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelaCoActionPerformed(evt);
            }
        });

        jLabel37.setText("Entre com os dados:");

        jLabel38.setText("ID da Produção:");

        jLabel39.setText("Título do Comercial:");

        jLabel40.setText("ID do Departamento:");

        jLabel41.setText("Descrição:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(48, 48, 48)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(buscaCo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(insereCo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(atualizaCo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(removeCo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(cancelaCo))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel37, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
                            .addComponent(jLabel41, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel40)
                                    .addComponent(jLabel38)
                                    .addComponent(jLabel39))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(idPrCOM, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                    .addComponent(tituloPrCOM, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                    .addComponent(descricaoCOM, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                    .addComponent(idDeCOM, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE))))
                        .addGap(76, 76, 76)))
                .addGap(48, 48, 48))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel37)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel38)
                    .addComponent(idPrCOM, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel39)
                    .addComponent(tituloPrCOM, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(12, 12, 12)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel40)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel41))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(idDeCOM, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(descricaoCOM, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 61, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(buscaCo)
                    .addComponent(insereCo)
                    .addComponent(atualizaCo)
                    .addComponent(removeCo)
                    .addComponent(cancelaCo))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    /** Trata eventos relacionados ao botão buscar.
     * Realiza a busca de acordo com determinado texto digitado, retornando
     * o resultado da pesquisa. Também trata erro.
     */
    private void buscaCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscaCoActionPerformed
        lerComercial();
        try {
            System.out.println(condicoes);
            retorno = bd.consulta("SELECT * FROM comercial " + condicoes);
            this.principal.mostraBusca(retorno);
        } catch (SQLException ex) {
            bd.trataErro(ex);
        }
        limpaTela();
    }//GEN-LAST:event_buscaCoActionPerformed

    /** Trata eventos relacionados ao botão insere.
     * Faz a inserção no banco de dados dos valores digitados no painel.
     */
    private void insereCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_insereCoActionPerformed
        bd.insercao("INSERT INTO comercial(idPr, tituloPr, descricaoPr, idDe)"
                + " VALUES (ID_PR.NEXTVAL, '" + tituloPrCOM.getText() + "',"
                + " '" + descricaoCOM.getText() + "', " + idDeCOM.getText() + ")");
        limpaTela();
    }//GEN-LAST:event_insereCoActionPerformed

    /** Trata eventos relacionados ao botão atualiza. Quando o botão é pressionado,
     * é enviada uma mensagem de instruções para acontecer a atualização.
     * Recebe os dados digitados e atualiza no banco.
     */
    private void atualizaCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atualizaCoActionPerformed
        if (atualizacao == false) {
            lerComercial();//fazer o teste para ver quantoas linhas irá atualizar
            jLabel37.setText("Entre com os novos dados e aperte atualizar novamente");
            mudaVisualizacaoCo();
            limpaTela();
        } else if (atualizacao == true) {
            novaLinha = "SET";
            if (idPrCOM.getText() != null && !idPrCOM.getText().trim().equals("")) {
                condicoes = condicoes + " idPr = " + idPrCOM.getText() + ", ";
            }
            if (tituloPrCOM.getText() != null && !tituloPrCOM.getText().trim().equals("")) {
                condicoes = condicoes + " UPPER(tituloPr) LIKE UPPER('%" + tituloPrCOM.getText() + "%'), ";
            }
            if (descricaoCOM.getText() != null && !descricaoCOM.getText().trim().equals("")) {
                condicoes = condicoes + " UPPER(descricaoPr) LIKE UPPER('%" + descricaoCOM.getText() + "%'), ";
            }
            if (idDeCOM.getText() != null && !idDeCOM.getText().trim().equals("")) {
                condicoes = condicoes + " idDe = " + idDeCOM.getText() + ", ";
            }
            novaLinha = novaLinha.substring(0, novaLinha.length() - 2);
            bd.atualiza("UPDATE comercial " + novaLinha + " " + condicoes);
            jLabel37.setText("Entre com os dados:");
            mudaVisualizacaoCo();
            condicoes = null;
            novaLinha = null;
            limpaTela();
        }
    }//GEN-LAST:event_atualizaCoActionPerformed

    /** Trata eventos relacionados ao botão remove.
     * Remove determinada tupla selecionada. trata erros
     */
    private void removeCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeCoActionPerformed
        novaLinha = "comercial";//novaLinha esta sendo usada para parametrizar a exclusão pelo outro painel
        lerComercial();
        try {
            retorno = bd.consulta("SELECT * FROM " + novaLinha + " " + condicoes);
            this.painel.novaLinha = novaLinha;
            this.painel.condicoes = condicoes;
        } catch (SQLException ex) {
            System.out.println("Erro " + ex);
        }
        this.principal.BuscaParaRemover(retorno);
        limpaTela();
    }//GEN-LAST:event_removeCoActionPerformed

    /** Trata eventos relacionados ao botão cancelar.
     * Ajusta o label da janela, volta pra janela principal e limpa os campos
     */
    private void cancelaCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelaCoActionPerformed
        jLabel37.setText("Entre com os dados:");
        mudaVisualizacaoCo();
        condicoes = null;
        novaLinha = null;
        limpaTela();
    }//GEN-LAST:event_cancelaCoActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton atualizaCo;
    private javax.swing.JButton buscaCo;
    private javax.swing.JButton cancelaCo;
    private javax.swing.JTextField descricaoCOM;
    private javax.swing.JTextField idDeCOM;
    private javax.swing.JTextField idPrCOM;
    private javax.swing.JButton insereCo;
    private javax.swing.JLabel jLabel37;
    private javax.swing.JLabel jLabel38;
    private javax.swing.JLabel jLabel39;
    private javax.swing.JLabel jLabel40;
    private javax.swing.JLabel jLabel41;
    private javax.swing.JButton removeCo;
    private javax.swing.JTextField tituloPrCOM;
    // End of variables declaration//GEN-END:variables

    /** Lê valores digitados, usando-os para fazer a condição do select
     */
    private void lerComercial() {
        condicoes = "WHERE";
        if (idPrCOM.getText() != null && !idPrCOM.getText().trim().equals("")) {
            condicoes = condicoes + " idPr = " + idPrCOM.getText() + " AND ";
        }
        if (tituloPrCOM.getText() != null && !tituloPrCOM.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(tituloPr) LIKE UPPER('%" + tituloPrCOM.getText() + "%') AND ";
        }
        if (descricaoCOM.getText() != null && !descricaoCOM.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(descricaoPr) LIKE UPPER('%" + descricaoCOM.getText() + "%') AND ";
        }
        if (idDeCOM.getText() != null && !idDeCOM.getText().trim().equals("")) {
            condicoes = condicoes + " idDe = " + idDeCOM.getText() + " AND ";
        }
        condicoes = condicoes.substring(0, condicoes.length() - 5);
    }

    /** limpa os campos.
     */
    private void limpaTela() {
        descricaoCOM.setText(null);
        idDeCOM.setText(null);
        idPrCOM.setText(null);
        tituloPrCOM.setText(null);
    }

    /** Método que muda a visualização da janela comercial
     */
    private void mudaVisualizacaoCo() {
        cancelaCo.setVisible(!atualizacao);
        painel.abaEdicaoTabelas.setEnabled(atualizacao);
        painel.painelPrincipal.setEnabled(atualizacao);
        buscaCo.setEnabled(atualizacao);
        insereCo.setEnabled(atualizacao);
        removeCo.setEnabled(atualizacao);
        atualizacao = !atualizacao;
    }
}
